/**
 * 定义基础接口返回值类型
 */
export type AxiosResultDefault<T = null> = T extends null ? Record<string, any> | Array<any> | null | undefined : T | null | undefined;

/**
 * 定义基础 table item 内容基础类型
 */
export type TableItem<T = null> = T extends null
  ? { id?: string; name?: string } & AxiosResultDefault<Record<string, any>>
  : T & AxiosResultDefault<Record<string, any>>;

/**
 * 定义基础 table 类型
 */
export interface TableType {
  data?: Array<TableItem> | null;
  pageNum?: number | null;
  pageSize?: number | null;
  total?: number | null;
  [key: string]: any;
}

/**
 * 定义基础 select 类型
 */
export type Select<T = null> = T extends null
  ? { id?: string; name?: string } & AxiosResultDefault<Record<string, any>>
  : T & AxiosResultDefault<Record<string, any>>;

/**
 * 定义基础 select 类型（导出）
 */
export type SelectType = Select;

/**
 * 定义 select 类型（列表）
 */
export type SelectDataType = Select[] | AxiosResultDefault<Array<any>>;

/**
 * 定义基础tree类型
 */
export type Tree<T = null> = T extends null
  ? { children?: Tree } & AxiosResultDefault<Record<string, any>>
  : T & AxiosResultDefault<Record<string, any>>;

/**
 * 定义基础tree类型（导出）
 */
export type TreeType = Tree;

/**
 * 定义tree类型（列表）
 */
export type TreeDataType = Tree[] | AxiosResultDefault<Array<any>>;
